welo git mirrors
RNS/__init__.py 0.5.8 (a77ec432) Text, 7.10 KB
T8b949e# MIT License
T8b949e#
T8b949e# Copyright (c) 2016-2022 Mark Qvist / unsigned.io
T8b949e#
T8b949e# Permission is hereby granted, free of charge, to any person obtaining a copy
T8b949e# of this software and associated documentation files (the "Software"), to deal
T8b949e# in the Software without restriction, including without limitation the rights
T8b949e# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
T8b949e# copies of the Software, and to permit persons to whom the Software is
T8b949e# furnished to do so, subject to the following conditions:
T8b949e#
T8b949e# The above copyright notice and this permission notice shall be included in all
T8b949e# copies or substantial portions of the Software.
T8b949e#
T8b949e# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
T8b949e# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
T8b949e# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
T8b949e# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
T8b949e# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
T8b949e# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
T8b949e# SOFTWARE.
Tff7b72import T7ee787os
Tff7b72import T7ee787sys
Tff7b72import T7ee787glob
Tff7b72import T7ee787time
Tff7b72import T7ee787random
Tff7b72import T7ee787threading
Tff7b72from T7ee787.T7ee787_version Tff7b72import Te6edf3__version__
Tff7b72from T7ee787.T7ee787Reticulum Tff7b72import Te6edf3Reticulum
Tff7b72from T7ee787.T7ee787Identity Tff7b72import Te6edf3Identity
Tff7b72from T7ee787.T7ee787Link Tff7b72import Te6edf3LinkTb4b4b4, Te6edf3RequestReceipt
Tff7b72from T7ee787.T7ee787Channel Tff7b72import Te6edf3MessageBase
Tff7b72from T7ee787.T7ee787Buffer Tff7b72import Te6edf3BufferTb4b4b4, Te6edf3RawChannelReaderTb4b4b4, Te6edf3RawChannelWriter
Tff7b72from T7ee787.T7ee787Transport Tff7b72import Te6edf3Transport
Tff7b72from T7ee787.T7ee787Destination Tff7b72import Te6edf3Destination
Tff7b72from T7ee787.T7ee787Packet Tff7b72import Te6edf3Packet
Tff7b72from T7ee787.T7ee787Packet Tff7b72import Te6edf3PacketReceipt
Tff7b72from T7ee787.T7ee787Resource Tff7b72import Te6edf3ResourceTb4b4b4, Te6edf3ResourceAdvertisement
Tff7b72from T7ee787.T7ee787Cryptography Tff7b72import Te6edf3HKDF
Tff7b72from T7ee787.T7ee787Cryptography Tff7b72import Te6edf3Hashes
Te6edf3modules Tff7b72= Te6edf3globTff7b72.Td2a8ffglobTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff/*.pyTa5d6ff"Tb4b4b4)
Te6edf3__all__ Tff7b72= Tb4b4b4[ Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffbasenameTb4b4b4(Te6edf3fTb4b4b4)Tb4b4b4[Tb4b4b4:Tff7b72-T79c0ff3Tb4b4b4] Tff7b72for Te6edf3f Tff7b72in Te6edf3modules Tff7b72if Tff7b72not Te6edf3fTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff'Ta5d6ff__init__.pyTa5d6ff'Tb4b4b4)Tb4b4b4]
Te6edf3LOG_CRITICAL Tff7b72= T79c0ff0
Te6edf3LOG_ERROR Tff7b72= T79c0ff1
Te6edf3LOG_WARNING Tff7b72= T79c0ff2
Te6edf3LOG_NOTICE Tff7b72= T79c0ff3
Te6edf3LOG_INFO Tff7b72= T79c0ff4
Te6edf3LOG_VERBOSE Tff7b72= T79c0ff5
Te6edf3LOG_DEBUG Tff7b72= T79c0ff6
Te6edf3LOG_EXTREME Tff7b72= T79c0ff7
Te6edf3LOG_STDOUT Tff7b72= T79c0ff0x91
Te6edf3LOG_FILE Tff7b72= T79c0ff0x92
Te6edf3LOG_MAXSIZE Tff7b72= T79c0ff5Tff7b72*T79c0ff1024Tff7b72*T79c0ff1024
Te6edf3loglevel Tff7b72= Te6edf3LOG_NOTICE
Te6edf3logfile Tff7b72= Tff7b72None
Te6edf3logdest Tff7b72= Te6edf3LOG_STDOUT
Te6edf3logtimefmt Tff7b72= Ta5d6ff"Ta5d6ff%Ta5d6ffY-Ta5d6ff%Ta5d6ffm-Tffd700%dTa5d6ff Ta5d6ff%Ta5d6ffH:Ta5d6ff%Ta5d6ffM:Ta5d6ff%Ta5d6ffSTa5d6ff"
Te6edf3compact_log_fmt Tff7b72= Tff7b72False
Te6edf3instance_random Tff7b72= Te6edf3randomTff7b72.Td2a8ffRandomTb4b4b4(Tb4b4b4)
Te6edf3instance_randomTff7b72.Td2a8ffseedTb4b4b4(Te6edf3osTff7b72.Td2a8ffurandomTb4b4b4(T79c0ff10Tb4b4b4)Tb4b4b4)
Te6edf3_always_override_destination Tff7b72= Tff7b72False
Te6edf3logging_lock Tff7b72= Te6edf3threadingTff7b72.Td2a8ffLockTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffloglevelnameTb4b4b4(Te6edf3levelTb4b4b4)Tb4b4b4:
Tff7b72if Tb4b4b4(Te6edf3level Tff7b72== Te6edf3LOG_CRITICALTb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffCriticalTa5d6ff"
Tff7b72if Tb4b4b4(Te6edf3level Tff7b72== Te6edf3LOG_ERRORTb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffErrorTa5d6ff"
Tff7b72if Tb4b4b4(Te6edf3level Tff7b72== Te6edf3LOG_WARNINGTb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffWarningTa5d6ff"
Tff7b72if Tb4b4b4(Te6edf3level Tff7b72== Te6edf3LOG_NOTICETb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffNoticeTa5d6ff"
Tff7b72if Tb4b4b4(Te6edf3level Tff7b72== Te6edf3LOG_INFOTb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffInfoTa5d6ff"
Tff7b72if Tb4b4b4(Te6edf3level Tff7b72== Te6edf3LOG_VERBOSETb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffVerboseTa5d6ff"
Tff7b72if Tb4b4b4(Te6edf3level Tff7b72== Te6edf3LOG_DEBUGTb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffDebugTa5d6ff"
Tff7b72if Tb4b4b4(Te6edf3level Tff7b72== Te6edf3LOG_EXTREMETb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffExtraTa5d6ff"
Tff7b72return Ta5d6ff"Ta5d6ffUnknownTa5d6ff"
Tff7b72def Td2a8ffversionTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3__version__
Tff7b72def Td2a8ffhost_osTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72from T7ee787.T7ee787vendorT7ee787.T7ee787platformutils Tff7b72import Te6edf3get_platform
Tff7b72return Te6edf3get_platformTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftimestamp_strTb4b4b4(Te6edf3time_sTb4b4b4)Tb4b4b4:
Te6edf3timestamp Tff7b72= Te6edf3timeTff7b72.Td2a8fflocaltimeTb4b4b4(Te6edf3time_sTb4b4b4)
Tff7b72return Te6edf3timeTff7b72.Td2a8ffstrftimeTb4b4b4(Te6edf3logtimefmtTb4b4b4, Te6edf3timestampTb4b4b4)
Tff7b72def Td2a8fflogTb4b4b4(Te6edf3msgTb4b4b4, Te6edf3levelTff7b72=T79c0ff3Tb4b4b4, Te6edf3_override_destination Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72global Te6edf3_always_override_destinationTb4b4b4, Te6edf3compact_log_fmt
Te6edf3msg Tff7b72= Tffa657strTb4b4b4(Te6edf3msgTb4b4b4)
Tff7b72if Te6edf3loglevel Tff7b72>Tff7b72= Te6edf3levelTb4b4b4:
Tff7b72if Tff7b72not Te6edf3compact_log_fmtTb4b4b4:
Te6edf3logstring Tff7b72= Ta5d6ff"Ta5d6ff[Ta5d6ff"Tff7b72+Te6edf3timestamp_strTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff] [Ta5d6ff"Tff7b72+Te6edf3loglevelnameTb4b4b4(Te6edf3levelTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff] Ta5d6ff"Tff7b72+Te6edf3msg
Tff7b72elseTb4b4b4:
Te6edf3logstring Tff7b72= Ta5d6ff"Ta5d6ff[Ta5d6ff"Tff7b72+Te6edf3timestamp_strTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff] Ta5d6ff"Tff7b72+Te6edf3msg
Te6edf3logging_lockTff7b72.Td2a8ffacquireTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3logdest Tff7b72== Te6edf3LOG_STDOUT Tff7b72or Te6edf3_always_override_destination Tff7b72or Te6edf3_override_destinationTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Te6edf3logstringTb4b4b4)
Te6edf3logging_lockTff7b72.Td2a8ffreleaseTb4b4b4(Tb4b4b4)
Tff7b72elif Tb4b4b4(Te6edf3logdest Tff7b72== Te6edf3LOG_FILE Tff7b72and Te6edf3logfile Tff7b72!= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3file Tff7b72= Tffa657openTb4b4b4(Te6edf3logfileTb4b4b4, Ta5d6ff"Ta5d6ffaTa5d6ff"Tb4b4b4)
Te6edf3fileTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3logstringTff7b72+Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)
Te6edf3fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffgetsizeTb4b4b4(Te6edf3logfileTb4b4b4) Tff7b72> Te6edf3LOG_MAXSIZETb4b4b4:
Te6edf3prevfile Tff7b72= Te6edf3logfileTff7b72+Ta5d6ff"Ta5d6ff.1Ta5d6ff"
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3prevfileTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3prevfileTb4b4b4)
Te6edf3osTff7b72.Td2a8ffrenameTb4b4b4(Te6edf3logfileTb4b4b4, Te6edf3prevfileTb4b4b4)
Te6edf3logging_lockTff7b72.Td2a8ffreleaseTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3logging_lockTff7b72.Td2a8ffreleaseTb4b4b4(Tb4b4b4)
Te6edf3_always_override_destination Tff7b72= Tff7b72True
Te6edf3logTb4b4b4(Ta5d6ff"Ta5d6ffException occurred while writing log message to log file: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3LOG_CRITICALTb4b4b4)
Te6edf3logTb4b4b4(Ta5d6ff"Ta5d6ffDumping future log events to console!Ta5d6ff"Tb4b4b4, Te6edf3LOG_CRITICALTb4b4b4)
Te6edf3logTb4b4b4(Te6edf3msgTb4b4b4, Te6edf3levelTb4b4b4)
Tff7b72def Td2a8ffrandTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3instance_randomTff7b72.Td2a8ffrandomTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3result
Tff7b72def Td2a8ffhexrepTb4b4b4(Te6edf3dataTb4b4b4, Te6edf3delimitTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tffa657iterTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72except Tf85149TypeErrorTb4b4b4:
Te6edf3data Tff7b72= Tb4b4b4[Te6edf3dataTb4b4b4]
Te6edf3delimiter Tff7b72= Ta5d6ff"Ta5d6ff:Ta5d6ff"
Tff7b72if Tff7b72not Te6edf3delimitTb4b4b4:
Te6edf3delimiter Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3hexrep Tff7b72= Te6edf3delimiterTff7b72.Td2a8ffjoinTb4b4b4(Ta5d6ff"Tffd700{:02x}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3cTb4b4b4) Tff7b72for Te6edf3c Tff7b72in Te6edf3dataTb4b4b4)
Tff7b72return Te6edf3hexrep
Tff7b72def Td2a8ffprettyhexrepTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4:
Te6edf3delimiter Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3hexrep Tff7b72= Ta5d6ff"Ta5d6ff<Ta5d6ff"Tff7b72+Te6edf3delimiterTff7b72.Td2a8ffjoinTb4b4b4(Ta5d6ff"Tffd700{:02x}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3cTb4b4b4) Tff7b72for Te6edf3c Tff7b72in Te6edf3dataTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff>Ta5d6ff"
Tff7b72return Te6edf3hexrep
Tff7b72def Td2a8ffprettysizeTb4b4b4(Te6edf3numTb4b4b4, Te6edf3suffixTff7b72=Ta5d6ff'Ta5d6ffBTa5d6ff'Tb4b4b4)Tb4b4b4:
Te6edf3units Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffKTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffMTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffTTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffPTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffETa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffZTa5d6ff'Tb4b4b4]
Te6edf3last_unit Tff7b72= Ta5d6ff'Ta5d6ffYTa5d6ff'
Tff7b72if Te6edf3suffix Tff7b72== Ta5d6ff'Ta5d6ffbTa5d6ff'Tb4b4b4:
Te6edf3num Tff7b72*Tff7b72= T79c0ff8
Te6edf3units Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffKTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffMTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffTTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffPTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffETa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffZTa5d6ff'Tb4b4b4]
Te6edf3last_unit Tff7b72= Ta5d6ff'Ta5d6ffYTa5d6ff'
Tff7b72for Te6edf3unit Tff7b72in Te6edf3unitsTb4b4b4:
Tff7b72if Tffa657absTb4b4b4(Te6edf3numTb4b4b4) Tff7b72< T79c0ff1000.0Tb4b4b4:
Tff7b72if Te6edf3unit Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Tffd700%.0fTa5d6ff Tffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3unitTb4b4b4, Te6edf3suffixTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Tffd700%.2fTa5d6ff Tffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3unitTb4b4b4, Te6edf3suffixTb4b4b4)
Te6edf3num Tff7b72/Tff7b72= T79c0ff1000.0
Tff7b72return Ta5d6ff"Tffd700%.2fTffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3last_unitTb4b4b4, Te6edf3suffixTb4b4b4)
Tff7b72def Td2a8ffprettytimeTb4b4b4(Te6edf3timeTb4b4b4, Te6edf3verboseTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3days Tff7b72= Tffa657intTb4b4b4(Te6edf3time Tff7b72/Tff7b72/ Tb4b4b4(T79c0ff24 Tff7b72* T79c0ff3600Tb4b4b4)Tb4b4b4)
Te6edf3time Tff7b72= Te6edf3time Tff7b72% Tb4b4b4(T79c0ff24 Tff7b72* T79c0ff3600Tb4b4b4)
Te6edf3hours Tff7b72= Tffa657intTb4b4b4(Te6edf3time Tff7b72/Tff7b72/ T79c0ff3600Tb4b4b4)
Te6edf3time Tff7b72%Tff7b72= T79c0ff3600
Te6edf3minutes Tff7b72= Tffa657intTb4b4b4(Te6edf3time Tff7b72/Tff7b72/ T79c0ff60Tb4b4b4)
Te6edf3time Tff7b72%Tff7b72= T79c0ff60
Te6edf3seconds Tff7b72= Tffa657roundTb4b4b4(Te6edf3timeTb4b4b4, T79c0ff2Tb4b4b4)
Te6edf3ss Tff7b72= Ta5d6ff"Ta5d6ff" Tff7b72if Te6edf3seconds Tff7b72== T79c0ff1 Tff7b72else Ta5d6ff"Ta5d6ffsTa5d6ff"
Te6edf3sm Tff7b72= Ta5d6ff"Ta5d6ff" Tff7b72if Te6edf3minutes Tff7b72== T79c0ff1 Tff7b72else Ta5d6ff"Ta5d6ffsTa5d6ff"
Te6edf3sh Tff7b72= Ta5d6ff"Ta5d6ff" Tff7b72if Te6edf3hours Tff7b72== T79c0ff1 Tff7b72else Ta5d6ff"Ta5d6ffsTa5d6ff"
Te6edf3sd Tff7b72= Ta5d6ff"Ta5d6ff" Tff7b72if Te6edf3days Tff7b72== T79c0ff1 Tff7b72else Ta5d6ff"Ta5d6ffsTa5d6ff"
Te6edf3components Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Te6edf3days Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3componentsTff7b72.Td2a8ffappendTb4b4b4(Tffa657strTb4b4b4(Te6edf3daysTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff dayTa5d6ff"Tff7b72+Te6edf3sd Tff7b72if Te6edf3verbose Tff7b72else Tffa657strTb4b4b4(Te6edf3daysTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ffdTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3hours Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3componentsTff7b72.Td2a8ffappendTb4b4b4(Tffa657strTb4b4b4(Te6edf3hoursTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff hourTa5d6ff"Tff7b72+Te6edf3sh Tff7b72if Te6edf3verbose Tff7b72else Tffa657strTb4b4b4(Te6edf3hoursTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ffhTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3minutes Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3componentsTff7b72.Td2a8ffappendTb4b4b4(Tffa657strTb4b4b4(Te6edf3minutesTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff minuteTa5d6ff"Tff7b72+Te6edf3sm Tff7b72if Te6edf3verbose Tff7b72else Tffa657strTb4b4b4(Te6edf3minutesTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ffmTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3seconds Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3componentsTff7b72.Td2a8ffappendTb4b4b4(Tffa657strTb4b4b4(Te6edf3secondsTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff secondTa5d6ff"Tff7b72+Te6edf3ss Tff7b72if Te6edf3verbose Tff7b72else Tffa657strTb4b4b4(Te6edf3secondsTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ffsTa5d6ff"Tb4b4b4)
Te6edf3i Tff7b72= T79c0ff0
Te6edf3tstr Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72for Te6edf3c Tff7b72in Te6edf3componentsTb4b4b4:
Te6edf3i Tff7b72+Tff7b72= T79c0ff1
Tff7b72if Te6edf3i Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72pass
Tff7b72elif Te6edf3i Tff7b72< Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4)Tb4b4b4:
Te6edf3tstr Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff, Ta5d6ff"
Tff7b72elif Te6edf3i Tff7b72== Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4)Tb4b4b4:
Te6edf3tstr Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff and Ta5d6ff"
Te6edf3tstr Tff7b72+Tff7b72= Te6edf3c
Tff7b72if Te6edf3tstr Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff0sTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Te6edf3tstr
Tff7b72def Td2a8ffphyparamsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffRequired Physical Layer MTU : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3ReticulumTff7b72.Td2a8ffMTUTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff bytesTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffPlaintext Packet MDU : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3PacketTff7b72.Td2a8ffPLAIN_MDUTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff bytesTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffEncrypted Packet MDU : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3PacketTff7b72.Td2a8ffENCRYPTED_MDUTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff bytesTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffLink Curve : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3LinkTff7b72.Td2a8ffCURVETb4b4b4)Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffLink Packet MDU : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3LinkTff7b72.Td2a8ffMDUTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff bytesTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffLink Public Key Size : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3LinkTff7b72.Td2a8ffECPUBSIZETff7b72*T79c0ff8Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff bitsTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffLink Private Key Size : Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3LinkTff7b72.Td2a8ffKEYSIZETff7b72*T79c0ff8Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff bitsTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffpanicTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ff_exitTb4b4b4(T79c0ff255Tb4b4b4)
Tff7b72def Td2a8ffexitTb4b4b4(Tb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffexitTb4b4b4(T79c0ff0Tb4b4b4)
Served by rngit 1.5.1 - Generated in 0.06s